package cn.xingzhe.monster.user.infrastructure.service;

import cn.xingzhe.monster.user.domain.enums.CaptchaTypeEnum;
import cn.xingzhe.monster.user.domain.model.CaptchaModel;
import cn.xingzhe.monster.user.domain.service.CaptchaDomainService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
 * 验证码服务
 * 基础设施层服务，调用领域服务
 *
 * @author System
 * @version 1.0.0
 * @since 2024-01-01
 */
@Service
public class CaptchaService {

    private final CaptchaDomainService captchaDomainService;

    /**
     * 验证码长度，默认6位
     */
    @Value("${captcha.length:6}")
    private int captchaLength;

    /**
     * 验证码有效期（分钟），默认5分钟
     */
    @Value("${captcha.expire-minutes:5}")
    private int expireMinutes;

    public CaptchaService(CaptchaDomainService captchaDomainService) {
        this.captchaDomainService = captchaDomainService;
    }

    /**
     * 生成验证码
     *
     * @param key  键（手机号或邮箱）
     * @param type 验证码类型
     * @return 生成的验证码
     */
    public String generateCaptcha(String key, CaptchaTypeEnum type) {
        CaptchaModel captchaModel = captchaDomainService.generateCaptcha(key, type);
        return captchaModel.getCode();
    }

    /**
     * 验证验证码
     *
     * @param key  键（手机号或邮箱）
     * @param code 验证码
     * @param type 验证码类型
     * @return 是否验证通过
     */
    public boolean verifyCaptcha(String key, String code, CaptchaTypeEnum type) {
        return captchaDomainService.verifyCaptcha(key, code, type);
    }

    /**
     * 删除验证码
     *
     * @param key  键（手机号或邮箱）
     * @param type 验证码类型
     */
    public void deleteCaptcha(String key, CaptchaTypeEnum type) {
        // 注：领域服务的 generateCaptcha 方法会自动删除旧的验证码
        // 如果需要单独删除，可以扩展领域服务或直接调用仓储
        // 这里暂时通过生成新验证码来删除旧验证码（实际场景中可能需要单独的删除方法）
    }
}

